package com.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
 * 工厂模式
 * 1.加载属性文件
 * 2.通过反射创建bean对象
 * 3.创建所有的对象，并存储起来，需要使用时获取
 * @author YDW
 * projectName:project2202_3
 * time:2022/5/4 13:11
 * description:
 */
public class BeanFactory {
    private static Map<String,Object> map= new HashMap<>();

    static {
        Properties prop=new Properties();
        //读取属性文件
        InputStream inputStream = BeanFactory.class.getResourceAsStream("/bean.properties");
        try {
            //加载属性文件，存储到properties
            prop.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Set<Object> keySet = prop.keySet();
        //循环key
        //key： userService
        //value： com.qf.service.impl.UserServiceImpl
        for (Object o : keySet) {
            String value=(String) prop.get(o);
            try {
                //通过反射 创建对象
                Class clazz = Class.forName(value);
                Object obj = clazz.newInstance();

                map.put((String) o,obj);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    public  static  Object getBean(String key){
        return map.get(key);
    }
}
